package com.fox.infrastructure.message;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

/**
 * 领域事件发布器实现（基于 Spring ApplicationEvent）
 * DomainEventPublisher 是一个领域层定义的接口，保证领域模型只依赖该接口。
 * 具体用哪种发布机制（消息队列、Kafka、Spring Event），由基础设施层来实现。
 * 这种松耦合方式，使得领域代码在需要同步/异步发布事件时能保持一致性。
 */
@Component
public class SpringEventPublisher implements DomainEventPublisher {

    private final ApplicationEventPublisher springPublisher;

    public SpringEventPublisher(ApplicationEventPublisher springPublisher) {
        this.springPublisher = springPublisher;
    }

    @Override
    public void publish(DomainEvent event) {
        springPublisher.publishEvent(event);
    }
}